#ifndef OPERATION_H
#define OPERATION_H

#include "constante.h"
#include "reel.h"
#include "entier.h"
#include "rationnel.h"
#include <cmath>

class Operation
{
public:
    Operation();
};

struct Addition : public Operation{
  static Constante* apply(const Constante&, const Constante&);
};

struct Substartion : public Operation{
  static Constante* apply(const Constante&, const Constante&);
};

struct Multiplcation : public Operation{
  static Constante* apply(const Constante&, const Constante&);
};

struct Division : public Operation{
  static Constante* apply(const Constante&, const Constante&);
};

struct Pow : public Operation{
  static Constante* apply(const Constante&, const Constante&);
};

struct Sign : public Operation{
  static Constante* apply(const Constante&);
};

struct Square : public Operation{
  static Constante* apply(const Constante&);
};

struct Cube : public Operation{
  static Constante* apply(const Constante&);
};

struct Inv : public Operation{
  static Constante* apply(const Constante&);
};

struct Sqrt : public Operation{
  static Constante* apply(const Constante&);
};


struct Cos : public Operation{
  static Constante* apply(const Constante&);
};
struct Cosh : public Operation{
  static Constante* apply(const Constante&);
};
struct Sin : public Operation{
  static Constante* apply(const Constante&);
};
struct Sinh : public Operation{
  static Constante* apply(const Constante&);
};
struct Tan : public Operation{
  static Constante* apply(const Constante&);
};
struct Tanh : public Operation{
  static Constante* apply(const Constante&);
};
struct Log : public Operation{
  static Constante* apply(const Constante&);
};
struct Ln : public Operation{
  static Constante* apply(const Constante&);
};
#endif // OPERATION_H
